// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
Vue.config.productionTip = false
//导入并使用饿了么UI
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
//导入并使用axious
import axios from 'axios'
Vue.prototype.axios=axios
axios.defaults.baseURL = process.env.API_ROOT;
// axios.defaults.withCredentials = true;
//导入并使用qs
import qs from 'qs'
Vue.prototype.$qs = qs
// xhrFields: {
//   withCredentials: true
// };
//商城部分的js文件引用
import myformat from "./view/shop/js/myformat";
Vue.prototype.$myFormat = myformat;

//webSocket
import stomp from 'stompjs'
Vue.prototype.Stomp = stomp


//富文本编辑器
import VueQuillEditor from 'vue-quill-editor'
// require styles
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
Vue.use(VueQuillEditor);


/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

//设置全局请求拦截器
axios.interceptors.request.use(
  request => {
    // 每次发送请求之前判断vuex中是否存在token
    // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    const authentication = window.localStorage.getItem("token");
    //设置认证令牌信息（头=值）
    request.headers.authentication=authentication;
    return request;
  },
  error => {
    return Promise.error(error);
  })

axios.interceptors.response.use(
  response => {
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    if (response.status === 200) {
      console.log(response.headers);
      //更新Token令牌信息
      if(response.headers.token != null && response.headers.token !=''){
        window.localStorage.setItem("token",response.headers.token);
      }
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  // 服务器状态码不是2开头的的情况
  // 这里可以跟你们的后台开发人员协商好统一的错误状态码
  // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
  // 下面列举几个常见的操作，其他需求可自行扩展
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 401: 未登录
        // 未登录则跳转登录页面，并携带当前页面的路径
        // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:
          alert("您未登录，请点击确认登录")
          window.location.href = "http://localhost/"
          break;
        // 403 token过期
        case 403:
          alert("您长时间未操作，已下线，请重新登录")
          window.location.href = "http://localhost/"
          // 清除token
          break;
        // 404请求不存在
        case 404:
          break;
        // 其他错误，直接抛出错误提示
        default:
      }
      return Promise.reject(error.response);
    }
  }
)

